package util;

import java.util.logging.Logger;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import dao.AfastamentoFuncionarioDAO;
import dao.AluguelLocalidadeDAO;
import dao.ArtistaDAO;
import dao.CargoDAO;
import dao.CategoriaEventoDAO;
import dao.ClausulaContratoDAO;
import dao.ClienteDAO;
import dao.ContratoDAO;
import dao.EmailCorporativoDAO;
import dao.EmpresaDAO;
import dao.EmpresarioDAO;
import dao.EventoDAO;
import dao.FeedBackClienteDAO;
import dao.FormaPagamentoDAO;
import dao.FuncionarioDAO;
import dao.GeneroDAO;
import dao.IngressoDAO;
import dao.LocalidadeEventoDAO;
import dao.PedidoDAO;
import dao.PessoaDAO;
import dao.PrestadoraDeServicosDAO;
import dao.SetorLocalidadeEventoDAO;
import dao.TipoDeServicoDAO;

import dao.AuditorDAO;
import dao.AuditoriaDAO;

/**
 * 
 * @author Cícero Thiago
 * 
 */

public abstract class DAOFactory {

	private final static Logger logger = Logger.getLogger("DAOFactory.class");

	private static EntityManager manager;
	private static final EntityManagerFactory factory;

	// metodo estatico
	static {
		factory = Persistence.createEntityManagerFactory(JPAUtil.NOME_UNIDADE);
		if (manager == null || !manager.isOpen()) {
			manager = factory.createEntityManager();
		}

	}

	public static CargoDAO getCargoDAO() {
		logger.info("Obtendo CargoDAO");
		CargoDAO carDAO = new CargoDAO(manager);
		return carDAO;

	}

	public static EventoDAO getEventoDAO() {
		logger.info("Obtendo CargoDAO");
		EventoDAO evenDAO = new EventoDAO(manager);
		return evenDAO;

	}

	public static EmpresaDAO getEmpresaDAO() {
		logger.info("Obtendo EmpresaDAO");
		EmpresaDAO empDAO = new EmpresaDAO(manager);
		return empDAO;

	}

	public static IngressoDAO getIngressoDAO() {
		logger.info("Obtendo IngressoDAO");
		IngressoDAO ingDAO = new IngressoDAO(manager);
		return ingDAO;

	}

	public static EmpresarioDAO getEmpresarioDAO() {
		logger.info("Obtendo EmpresarioDAO");
		EmpresarioDAO empreDAO = new EmpresarioDAO(manager);
		return empreDAO;
	}

	public static ContratoDAO getContratoDAO() {
		logger.info("Obtendo ContratoDAO");
		ContratoDAO contrDAO = new ContratoDAO(manager);
		return contrDAO;
	}

	public static ClienteDAO getClienteDAO() {
		logger.info("Obtendo ClienteDAO");
		ClienteDAO clieDAO = new ClienteDAO(manager);
		return clieDAO;
	}

	public static ClausulaContratoDAO getClausulaContratoDAO() {
		logger.info("Obtendo ClausulaContratoDAO");
		ClausulaContratoDAO clausuDAO = new ClausulaContratoDAO(manager);
		return clausuDAO;
	}

	public static EmailCorporativoDAO getEmailCorporativoDAO() {
		logger.info("Obtendo EmailCorporativoDAO");
		EmailCorporativoDAO emailDAO = new EmailCorporativoDAO(manager);
		return emailDAO;
	}

	public static FeedBackClienteDAO getFeedBackClienteDAO() {
		logger.info("Obtendo FeedBackClienteDAO");
		FeedBackClienteDAO feedDAO = new FeedBackClienteDAO(manager);
		return feedDAO;
	}

	public static CategoriaEventoDAO getCategoriaEventoDAO() {
		logger.info("Obtendo CategoriaEventoDAO");
		CategoriaEventoDAO categoriaDAO = new CategoriaEventoDAO(manager);
		return categoriaDAO;
	}

	public static GeneroDAO getGeneroDAO() {
		logger.info("Obtendo GeneroDAO");
		GeneroDAO generoDAO = new GeneroDAO(manager);
		return generoDAO;
	}

	public static PedidoDAO getPedidoDAO() {
		logger.info("Obtendo PedidoDAO");
		PedidoDAO pedidoDAO = new PedidoDAO(manager);
		return pedidoDAO;
	}

	public static FuncionarioDAO getFuncionarioDAO() {
		logger.info("Obtendo FuncionarioDAO");
		FuncionarioDAO funcionarioDAO = new FuncionarioDAO(manager);
		return funcionarioDAO;
	}

	public static TipoDeServicoDAO getTipoDeServicoDAO() {
		logger.info("Obtendo TipoServicoDAO");
		TipoDeServicoDAO tipoDeServico = new TipoDeServicoDAO(manager);
		return tipoDeServico;
	}

	public static AfastamentoFuncionarioDAO getAfastamentoFuncionario() {
		logger.info("Obtendo AfastamentoFuncionarioDAO");
		AfastamentoFuncionarioDAO afastamentoFuncionario = new AfastamentoFuncionarioDAO(
				manager);
		return afastamentoFuncionario;

	}

	public static ArtistaDAO getArtistaDAO() {
		logger.info("Obtendo AfastamentoFuncionarioDAO");
		ArtistaDAO artista = new ArtistaDAO(manager);
		return artista;
	}

	public static AluguelLocalidadeDAO getAluguelLocalidadeDAO() {
		logger.info("Obtendo AfastamentoFuncionarioDAO");
		AluguelLocalidadeDAO aluguelLocalidade = new AluguelLocalidadeDAO(
				manager);
		return aluguelLocalidade;
	}

	public static FormaPagamentoDAO getFormaPagamentoDAO() {
		logger.info("Obtendo AfastamentoFuncionarioDAO");
		FormaPagamentoDAO formaPagamento = new FormaPagamentoDAO(manager);
		return formaPagamento;
	}

	public static LocalidadeEventoDAO getLocalidadeEventoDAO() {
		logger.info("Obtendo AfastamentoFuncionarioDAO");
		LocalidadeEventoDAO localidadeEvento = new LocalidadeEventoDAO(manager);
		return localidadeEvento;
	}

	public static PrestadoraDeServicosDAO getPrestadoraDeServicosDAO() {
		logger.info("Obtendo AfastamentoFuncionarioDAO");
		PrestadoraDeServicosDAO prestadoraDeServicos = new PrestadoraDeServicosDAO(
				manager);
		return prestadoraDeServicos;
	}

	public static SetorLocalidadeEventoDAO SetorLocalidadeEventoDAO() {
		logger.info("Obtendo AfastamentoFuncionarioDAO");
		SetorLocalidadeEventoDAO setorLocalidadeEvento = new SetorLocalidadeEventoDAO(
				manager);
		return setorLocalidadeEvento;
	}
	
	public static AuditorDAO getAuditorDAO() {
		logger.info("Obtendo AuditorDAO");
		AuditorDAO auditorDao = new AuditorDAO(manager);
		return auditorDao;
	}
	
	public static AuditoriaDAO getAuditoriaDAO() {
		logger.info("Obtendo AuditorDAO");
		AuditoriaDAO auditoriaDao = new AuditoriaDAO(manager);
		return auditoriaDao;
	}
	
	public static PessoaDAO getPessoaDAO() {
		logger.info("Obtendo PessoaDAO");
		PessoaDAO pessoaDao = new PessoaDAO(manager);
		return pessoaDao;
	}

}
